Reference
- 문제 출처 - HackerRank
- 파이썬 연습 - Practice - Python
개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다
문제를 풀고 Discussion Tab을 참고하며 코드 스타일을 개선하려고 노력하고자 합니다
HackerRank
Subdomain
- ~~Introduction~~
- ~~Basic Data Types~~
- ~~Strings~~
- ~~Sets~~
- ~~Math~~
- ~~Itertools~~
- ~~Collections~~
- ~~Date and Time~~
- ~~Errors and Exceptions~~
- ~~Classes~~
- ~~Built-Ins~~
- ~~Python Functionals~~
- <strong style="color:blue">Regex and Parsing</strong>
- XML
- Closures and Decorators
- Numpy
- Debugging
Regex and Parsing
Hex Color Code
문제 : CSS 코드에서 HEX color code를 찾는 문제
입력 : 코드줄 수 N; (N 반복) CSS 코드
출력 : HEX color code
11 |
#FfFdF8 |
import re |
HTML Parser - Part 1
문제 : html 문서를 태그별로 구분하는 문제
2 |
Start : html |
end 태그 출력문에서 공백이 3개 있어야한다…
from html.parser import HTMLParser |
HTML Parser - Part 2
문제 : 주석과 데이터를 구분하는 문제
4 |
|
handle_comment 와 handle_data 를 정의하는 문제
from html.parser import HTMLParser |
Detect HTML Tags, Attributes and Attribute Values
문제 : 태그, 속성, 속성값을 구분하는 문제
9 |
head |
from html.parser import HTMLParser |
정규식만 사용한 답안
import re |
Validating UID
문제 : unique identification number(UID)를 구별하는 문제
조건 : 영숫자 범위(a-z, A-Z, 0-9) 사이에서 최소 2개의 대문자, 최소 3개의 숫자를 반복없이 포함해야하고 총 길이는 10이다
예제 : B1CD102354 에서는 1이 중복된다 -> Invalid
매우 깔끔하고 좋은 것 같다. all()
함수의 사용에 익숙해지자.
특히 문자의 반복을 확인하는 정규표현식을 잘 기억하자(?!패턴)
: 부정적 뒤보기 선언. 이후에 나올 문자들이 ‘패턴’에 매치되어서는 안 된다.참조 : \n
: 예를 들어 작은 따옴표나 큰 따옴표 내에 한 개 이상의 문자가 있는 표현식인 r'['"][^'"]*['"]'
가 있을 때, 시작하는 따옴표와 끝나는 따옴표가 똑같게 만들려면 r'(['"])[^'"]*\1'
이렇게 표현하면 된다. 여기서 \1은 첫번째 괄호인 ([‘“])이 매치되는 것과 같다.
import re |
assert
조건식은 처음봤는데 다음에 자세히 살펴봐야겠다. 우선 정렬시키고 조건을 확인하는 것이 인상적이였다
import re |
Validating Credit Card Numbers
문제 : 신용카드 번호의 유효성을 확인하는 문제
조건 :
4, 5, 6 중 하나로 시작해야한다
총 16자리이다
0-9 사이의 숫자로 이루어져있다-
로 4자리씩 구분되어 있다,
_
와 같은 다른 구분자를 사용해서는 안된다
숫자가 연속으로 4번 반복하면 안된다
6 |
Valid # 4123456789123456 |
import re |
정규식을 여러줄에 걸쳐서 작성할 수도 있음을 알게 되었다
import re |
Validating Postal Codes
문제 : 유효한 우편번호(postal code)를 확인하는 문제
조건 :
100000 - 999999 사이의 번호여야 한다
하나 이상의 alternating repetitive digit pair 가 없어야한다
(alternating repetitive digit란, 숫자 하나 건너 똑같은 숫자가 나오는 것을 말한다)
예제 :
523563 # 여기서는 alternating repetitive digit이 없다
552523 # 여기서는 숫자 2와 5가 alternating repetitive digits에 해당한다
정규표현식의 시작과 끝을 정확히 명시해 줘야한다! ^ $
를 명시하지 않으면 6자리를 넘어가는 번호도 유효하다고 처리한다
regex_integer_in_range = r"^[1-9]\d{5}$" |
Matrix Script
문제 : 행렬로 암호가 주어졌을 때 이를 해독하는 문제
해독 방법 : 행으로 읽어가며 영문자만 가져온다
문자와 문자 사이에 특수문자가 있으면 ‘ ‘으로 치환하면 된다
import re |